const extensions = {};
// Maps uuid -> extension state object (returned from init())
const extensionStateObjs = {};
+// Maps uuid -> [GFile to the extension directory, Extension type]
+const extensionDirs = {};
+
// Arrays of uuids
var enabledExtensions;
// GFile for user extensions
function enableExtension(uuid) {
let meta = extensionMeta[uuid];
- if (!meta)
+ if (!meta) {
+ if (extensionDirs[uuid]) {
+ let [dir, type] = extensionDirs[uuid];
+ loadExtension(dir, type);
+ }
return;
+ }
if (meta.state != ExtensionState.DISABLED)
return;
state: state });
}
-function loadExtension(dir, enabled, type) {
+function loadExtension(dir, type) {
let info;
let uuid = dir.get_basename();
meta.state = ExtensionState.DISABLED;
- if (enabled)
- enableExtension(uuid);
+ enableExtension(uuid);
_signals.emit('extension-loaded', meta.uuid);
_signals.emit('extension-state-changed', meta);
let name = info.get_name();
let child = dir.get_child(name);
let enabled = enabledExtensions.indexOf(name) != -1;
- loadExtension(child, enabled, type);
+ extensionDirs[name] = [dir, type];
+ if (enabled)
+ loadExtension(child, type);
}
fileEnum.close(null);
}